from redis import StrictRedis

redis = StrictRedis(host='localhost', port=6379, decode_responses=True)
# redis.set('username', '小明', ex=1)  # 增
# redis.delete('username')  # 删
# redis.set('username', '小明明')  # 改
# username = redis.get('username')  # 查
# print(username)

# redis.hset('article', 1, '第一页数据')
# redis.hset('article', 2, '第二页数据')
# res = redis.hget('article', 1)  # 打印输出为  第一页数据
# res = redis.hget('article', 2)  # 打印输出为  第二页数据
# print(res)
# class User:
#     def __init__(self, name, age, sex):
#         self.name = name
#         self.age = age
#         self.sex = sex
# 
# 
# user = User('小明', 18, '男')
# redis.hmset('user', {'name': user.name, 'age': user.age, 'sex': user.sex})
# res = redis.hmget('user', ('name', 'age', 'sex'))
# print(res)
# 入队列
for i in range(10):
    redis.lpush('visitors', '我是第{}个访问用户'.format(i))
# 出队列
# while True:
#     res = redis.rpop('visitors')
#     if res is None:
#         print('over')
#         break
#     print(res)
#
#
# # rpush/rpushx 有序列表操作,从队列后插入元素, lpush/lpushx 和rpush/rpushx的区别是插入到队列的头部,同上,'x'含义是只对已存在的key进行操作
# redis.rpush('test_list', 'bar1')  # 返回一个列表的长度1
# redis.lpush('test_list', 'bar0')  # 返回一个列表的长度2
# redis.rpushx('test_list', 'bar2')  # 返回3,rpushx只对已存在的队列做添加,否则返回0
# # llen返回当前列表长度
# redis.llen('test_list')  # 3
# # lrange 返回队列中一个区间的元素
# redis.lrange('test_list', 0, 1)  # 返回数组包含第0个至第1个共2个元素
# redis.lrange('test_list', 0, -1)  # 返回第0个至倒数第一个,相当于返回所有元素,注意redis中很多时候会用到负数,下同
# # lindex 返回指定顺序位置的list元素
# redis.lindex('test_list', 1)  # 返回'bar1'
# # lset 修改队列中指定位置的value
# redis.lset('test_list', 1, '123')  # 修改位置1的元素,返回true
# # lrem 删除队列中左起指定数量的字符
# redis.lrem('test_list', 1, '_')  # 删除队列中左起(右起使用-1)1个字符'_'(若有)

redis.sadd('test_set1', 1)
redis.sadd('test_set1', 2)
redis.sadd('test_set1', 3)
redis.sadd('test_set1', 4)

redis.sadd('test_set2', 1)
redis.sadd('test_set2', 2)
redis.sadd('test_set2', 5)
redis.sadd('test_set2', 6)

# 差集
print(redis.sdiff('test_set2', 'test_set1'))  # {'5', '6'}
redis.sdiffstore('set3', 'test_set2', 'test_set1')
print(redis.smembers('set3'))  # {'5', '6'}

# 并集
print(redis.sinter('test_set1', 'test_set2'))  # {'2', '1'}
redis.sinterstore('set4', 'test_set1', 'test_set2')
print(redis.smembers('set4'))  # {'2', '1'}

# 差集
print(redis.sunion('test_set1', 'test_set2'))  # {'1', '2', '4', '6', '3', '5'}
redis.sunionstore('set5', 'test_set1', 'test_set2')
print(redis.smembers('set5'))  # {'1', '2', '4', '6', '3', '5'}


redis.zadd('users', 1, '小明')
redis.zadd('users', 1, '小明')
redis.zadd('users', 2.1, '小明')
redis.zadd('users', 2, '小刚')
redis.zadd('users', 5, '小红')
redis.zadd('users', 9, '小二')
redis.zadd('users', 3, '小小')
res = redis.zrange('users', 0, -1)
print(res)  # ['小刚', '小明', '小小', '小红', '小二']
